Today, computer programs are commonly written in what is referred to as a high-level computer language, such as C, C++, Visual Basic, and so forth. The computer program is then compiled into what is commonly referred to as source code, which can be executed or run by a computer. Computer programs are often distributed in this executable source code format, rather than requiring the end user to have the knowledge and resources to compile the high-level computer language into a form that can be run by a computer.
However, there are situations where it is desirable for an end user (e.g., a system administrator) to make changes to a computer program. For example, a particular program may include routing functionality, where the program receives messages from different devices or different components within the same device and forwards those messages to different devices or components based on a set of rules. It is oftentimes desirable to allow the system administrator or end user of the program to alter these routing rules, inserting their own rules and/or criteria for where particular messages should be forwarded. However, it can be very difficult and time-consuming to make such changes to compiled code.
One solution to allow such changes to compiled computer programs is the use of a configuration system. During execution or runtime of the computer program, a configuration system on the computer can be accessed to obtain custom information identified by the end user through a configuration file. The configuration system accesses the configuration file for the computer program, and creates appropriate objects based on the specified information in the configuration file. These objects can then be accessed by the computer program. Such objects would allow, for example, user-defined routing rules and/or criteria to be used by the compiled program.
However, certain problems exist in current configuration systems. For example, a configuration file could be written that includes new routing rules and/or criteria, but the format of those routing rules and/or criteria must be consistent—new formats for describing the routing rules and/or criteria cannot be defined. Another problem is that different components or objects generated by the configuration system are typically not aware of one another. So, new components could be created by the configuration system but they would not be able to make use of the functionality provided by one another because they do not know of one another's existence.
Extensible configuration handlers are described herein that solve these and other problems.